//**************************************************************
//					新人研修用ソースプログラム	
//**************************************************************
//ファイル名：practice8-1.c						
//**************************************************************

//===========================						
//インクルード
//===========================
#include<stdio.h>

//===========================						
//マクロ
//===========================
#define SUM 10

//===========================						
//構造体定義
//===========================
struct test{
	char name[2];	/* 氏名 */
	int math;		/* 数学 */
	int eng;		/* 英語 */
	int jpn;		/* 国語 */
};

//===========================
//プロトタイプ宣言
//===========================
int avg_culc(struct test[], int);

//*********************************************************************
//機能名称　：メイン関数
//
//関数名　　：int main(void)
//引数　　　：なし
//戻り値　　：常に0
//機能　　　：生徒10人分の成績情報を格納した構造体を宣言する。
//　　　　　：関数で計算した平均値を表示する。
//*********************************************************************	
int main(void) {
	// 11個目の構造体は科目ごとの合計値格納用
	struct test average[11] = {
		{"A", 45, 55, 75},
		{"B", 85, 20, 45},
		{"C", 75, 12, 80},	
		{"D", 43, 80, 55},	
		{"E", 55, 75, 30},	
		{"F", 92, 85, 92},	
		{"G", 25,  5, 98},	
		{"H", 75, 50, 60},	
		{"I", 98, 98, 10},
		{"J", 25, 99, 36},
	};
	int i;
	
	// 個人毎の平均点表示
	for(i = 0; i < 10; i++){
		printf("%sの平均点は%dです。\n", average[i].name, avg_culc(average, i));
	}
	// 科目毎の平均点表示
	printf("10人の数学の平均は%d点です。\n", (average[SUM].math / SUM));
	printf("10人の英語の平均は%d点です。\n", (average[SUM].eng / SUM));
	printf("10人の国語の平均は%d点です。\n", (average[SUM].jpn / SUM));

	return 0;		
}

//*********************************************************************
//機能名称　：テスト平均値算出関数
//
//関数名　　：int avg_culc(struct test[], int)
//引数　　　：struct test* str_avg
//戻り値　　：int sum_sbj;
//機能　　　：10人分の学生別平均値の算出と科目別合計値の算出。
//*********************************************************************	
int avg_culc(struct test str_avg[], int avg_i){
	int sum_sbj;
	sum_sbj = 0;

	// 数学の合計点集計
	str_avg[SUM].math = (str_avg[SUM].math + str_avg[avg_i].math);
	// 個人の数学合計点集計
	sum_sbj = (sum_sbj + str_avg[avg_i].math);

	// 英語の合計点集計
	str_avg[SUM].eng = (str_avg[SUM].eng + str_avg[avg_i].eng);
	// 個人の英語合計点集計
	sum_sbj = (sum_sbj + str_avg[avg_i].eng);

	// 個人の国語合計点集計
	str_avg[SUM].jpn = (str_avg[SUM].jpn + str_avg[avg_i].jpn);
	// 個人の国語合計点集計
	sum_sbj = (sum_sbj + str_avg[avg_i].jpn);
	
	return (sum_sbj / 3);	
}
